'use strict';

const Controller = require('egg').Controller;

class HomeController extends Controller {
    async index() {
        const { ctx } = this;
        ctx.body = 'hi, egg';
    }

    /**
     * 注册接口
     */
    async register() {
        // 接收参数
        const { username, password } = this.ctx.request.body;

        // 非空校验
        if (!username || !password) {
            this.ctx.body = {
                code: 400,
                message: '缺少必须参数',
            };
            return;
        }

        // 用户去重，即同一个账号不能重复注册
        // 检查当前传入的 username 在数据库中是否已经存在，如果存在，则不允许注册了
        const user = await this.service.user.findByUsername(username);
        if (user) {
            this.ctx.body = {
                code: 403,
                message: '用户已注册',
            };
            return;
        }

        // 创建用户
        const res = await this.service.user.create({
            username,
            password: this.ctx.helper.passwordEncoder(password),
        });

        // 判断是否添加成功
        if (res.affectedRows !== 1) {
            this.ctx.body = {
                code: 500,
                message: '注册失败',
            };
            return;
        }

        // 注册成功
        this.ctx.body = {
            code: 201,
            message: '注册成功',
        };
    }

    /**
     * 登录接口
     */
    async login() {
        // 获取参数
        const { username, password } = this.ctx.request.body;

        // 非空检验
        if (!username || !password) {
            this.ctx.body = {
                code: 400,
                message: '缺少必须参数',
            };
            return;
        }

        // 查询数据库，判断用户是否存在
        const user = await this.service.user.findByUsername(username);
        if (!user) {
            this.ctx.body = {
                code: 404,
                message: '用户未注册',
            };
            return;
        }

        // 有该用户，检查密码是否正确
        if (user.password !== this.ctx.helper.passwordEncoder(password)) {
            this.ctx.body = {
                code: 400,
                message: '用户密码不匹配',
            };
            return;
        }

        delete user.password;

        // 返回成功响应
        this.ctx.body = {
            code: 200,
            data: user,
            message: '登录成功',
        };
    }
}

module.exports = HomeController;
